#ifndef _BACKGROUND_RENDERER_H_
#define _BACKGROUND_RENDERER_H_

#include "../Resourse_manager/TextureAsset.h"
#include "../Resourse_manager/AssetManager.h"
#include "Vector2.h"
#include <graphics.h>
#include <memory>
#include <string>

// 背景渲染器类
class BackgroundRenderer
{
public:
    BackgroundRenderer();
    ~BackgroundRenderer();

    // 设置背景纹理
    bool SetBackground(const std::string& textureId, const std::wstring& texturePath);

    // 设置背景纹理（使用已存在的资源）
    bool SetBackground(const std::string& textureId);

    // 渲染背景
    void Render(const Vector2& cameraOffset = Vector2(0, 0));    // 设置背景渲染模式
    enum class RenderMode
    {
        Stretch,        // 拉伸填充
        Tile,           // 平铺
        Center,         // 居中
        FitWidth,       // 适应宽度
        FitHeight,      // 适应高度
        WorldTile,      // 世界平铺（针对大世界优化）
        FitWorld,       // 适应世界大小
        FitWorldKeepRatio  // 适应世界大小并保持比例
    };

    void SetRenderMode(RenderMode mode) { m_renderMode = mode; }
    RenderMode GetRenderMode() const { return m_renderMode; }    // 设置背景偏移（用于视差滚动）
    void SetParallaxFactor(float factorX, float factorY);
    void SetPosition(const Vector2& position) { m_position = position; }
    const Vector2& GetPosition() const { return m_position; }

    // 设置世界边界（用于WorldTile模式）
    void SetWorldBounds(float width, float height);
    float GetWorldWidth() const { return m_worldWidth; }
    float GetWorldHeight() const { return m_worldHeight; }    // 设置透明度
    void SetAlpha(float alpha);
    float GetAlpha() const { return m_alpha; }

    // 便捷方法：自动选择最佳的世界适应模式
    void SetAutoFitWorld(bool keepRatio = true);

    // 获取背景尺寸
    int GetWidth() const;
    int GetHeight() const;

    // 检查是否有有效的背景纹理
    bool HasValidTexture() const;

private:
    std::shared_ptr<TextureAsset> m_textureAsset;
    std::string m_currentTextureId;
    AssetManager* m_assetManager;

    RenderMode m_renderMode;
    Vector2 m_position;
    Vector2 m_parallaxFactor;
    float m_alpha;

    // 世界边界
    float m_worldWidth;
    float m_worldHeight;    // 渲染函数根据不同模式
    void RenderStretched(const Vector2& offset);
    void RenderTiled(const Vector2& offset);
    void RenderCentered(const Vector2& offset);
    void RenderFitWidth(const Vector2& offset);
    void RenderFitHeight(const Vector2& offset);
    void RenderWorldTiled(const Vector2& offset);
    void RenderFitWorld(const Vector2& offset);
    void RenderFitWorldKeepRatio(const Vector2& offset);

    // 辅助函数
    void RenderImage(IMAGE* image, int x, int y, float alpha = 1.0f);
};

#endif // !_BACKGROUND_RENDERER_H_
